home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cmln0885.arc / SMALTAL3.LTG < prev   
Text File  |  1986-02-27  |  5KB  |  133 lines

  1.  
  2.  
  3.           Smalltalk LISTING 3:  
  4.               
  5.  
  6.           Speller Class Definition and Methods
  7.  
  8.           Object subclass: #Speller
  9.             instanceVariableNames:
  10.               'wordList correctList ' "Valid word list and autocorrect list"
  11.             classVariableNames:
  12.               'Marker'                "Char for marking misspelled words"
  13.             poolDictionaries: ''
  14.  
  15.           Speller class methods
  16.  
  17.           words: wordFile corrections: correctFile
  18.  
  19.             "Create a new speller object, reading the word list
  20.              from wordFile and correction list from correctFile.
  21.              Also initialize the character that misspelled words
  22.              are marked with."
  23.              Marker := $*.
  24.              ^self new initialize
  25.                 words: wordFile;
  26.                 corrections: correctFile
  27.  
  28.  
  29.           Speller methods
  30.  
  31.           addCorrections: inStream
  32.  
  33.             "Add correction word-pairs from the input stream to
  34.              the correction list.  Each word pair is on its own line.
  35.              A line with only one word specifies a word to be deleted
  36.              rather than replaced."
  37.              |entry word|
  38.              [inStream atEnd]
  39.                whileFalse:  [entry := ReadStream on: inStream nextLine.
  40.                              word := entry nextWord.
  41.                              entry nextGap.
  42.                              entry atEnd
  43.                                ifTrue:  [self correct: word with: '']
  44.                                ifFalse: [self correct: word
  45.                                                  with: entry nextWord]]
  46.  
  47.           addWord: aWord
  48.  
  49.             "Add a word to the word list."
  50.              aWord notNil
  51.                ifTrue: [wordList add: aWord trimBlanks asUpperCase]
  52.  
  53.           addWords: inStream
  54.  
  55.             "Add words in the input stream to the word list"è            [inStream atEnd]
  56.               whileFalse: [self addWord: inStream nextWord].
  57.             self addWord: ''
  58.  
  59.           check: aWord
  60.  
  61.             "Spell check a word and if misspelled, prompt the
  62.              user with the marked word.  The user may hit CR
  63.              to output the marked word, erase the mark to accept
  64.              the word as is, or edit the word to correct it.  If
  65.              the user accepts or edits the word, the wordList and
  66.              correctList are updated accordingly."
  67.              |word|
  68.              word := self spell: aWord.
  69.              (self isMarked: word)
  70.              ifTrue: [word := Prompter prompt: 'Suspect word'
  71.                                        default: word.
  72.                       (self isMarked: word)
  73.                       ifFalse: [self addWord: word.
  74.                                word ~= aWord
  75.                                ifTrue: [self correct: aWord
  76.                                                 with: word]]].
  77.              ^word
  78.  
  79.           correct: badWord with: goodWord
  80.  
  81.             "Add a word pair to the correction list."
  82.              ((badWord notNil) and: [goodWord notNil])
  83.                ifTrue: [correctList at:  badWord trimBlanks asUpperCase
  84.                                    put: goodWord trimBlanks asUpperCase]
  85.  
  86.           corrections: correctFile
  87.  
  88.             "Add correction pairs from the specified file to the
  89.              correction list."
  90.              self addCorrections: (Disk file: correctFile)
  91.  
  92.           initialize
  93.  
  94.             "Create word list and correction list objects for speller"
  95.              wordList := Set new.
  96.              correctList := Dictionary new.
  97.  
  98.           isMarked: aWord
  99.  
  100.             "Return true if aWord has been marked by the spell method"
  101.              ^(aWord size > 0) and: [(aWord at: aWord size) = Marker]
  102.  
  103.           matchCase: aWord using: modelWord
  104.  
  105.             "Make aWord conform to the case/capitalization of
  106.              the model word."
  107.              |word|
  108.              (modelWord at: modelWord size) isUpperCase
  109.                ifTrue: [^aWord asUpperCase].è             word := aWord asLowerCase.
  110.              (modelWord at: 1) isUpperCase
  111.                ifTrue:  [word at: 1 put: (word at: 1) asUpperCase].
  112.              ^word
  113.  
  114.           spell: aWord
  115.  
  116.             "Spell check a word: replace it if it has an entry
  117.              in correctList, otherwise mark it if not in WordList.
  118.              If the word is being replaced, make the case of the
  119.              replacement word correspond to that of the input word."
  120.              ^self
  121.                matchCase:
  122.                  (correctList at: aWord trimBlanks asUpperCase
  123.                     ifAbsent:
  124.                       [(wordList includes: aWord trimBlanks asUpperCase)
  125.                         ifTrue:  [^aWord]
  126.                         ifFalse: [^aWord , (String with: Marker)]])
  127.                using: aWord
  128.  
  129.           words: wordFile
  130.  
  131.             "Add words from the specified file to the word list."
  132.              self addWords: (Disk file: wordFile)
  133.